TruRisk™ Eliminate Release 4.2 API
September 22, 2026
This release adds APIs for patch blocking rules and for the deployment job approval workflow, so you can block unwanted patches before deployment and require approval before a job runs.
Before understanding the API release highlights, learn more about the API server URL to be used in your API requests by referring to the Know Your Qualys API Server URL section. For this API Release Notes, <qualys_base_url> is mentioned in the sample API requests.
New Feature
Block Unwanted Patches Before Deployment
What's New for You
You can now create and manage patch-blocking rules through the API, so that unwanted patches are skipped before deployment on your Windows and Linux assets.
New API: Get All Patch Blocking Rules
| New or Updated API | New |
| API Endpoint | /pm/v1/blocking/rules |
| Method | GET |
| DTD or XSD changes | Not Applicable |
With this release, users can retrieve a list of blocking rules. The feature supports both Windows and Linux platforms. If the platform parameter is not provided, all Windows blocking rules will be fetched by default.
Sample - Get All Patch Blocking RulesSample - Get All Patch Blocking Rules
API Request
curl -X 'GET' \
'<qualys_base_url>/pm/v1/blocking/rules' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <JWT_Token>'
API Response
[
{
"ruleId": "fa948db3-6b44-43d7-828c-2f056a966954",
"ruleName": "Windows_blocked_Enable_Acquired_From_Vendor_Patches ",
"ruleReason": "blocked Enable Acquired From Vendor Patches ",
"criteria": {
"type": 1,
"value": "patch.isEnabledVendorAcquiredPatches:true"
},
"platform": "Windows",
"customerId": "5e35d0c5-ea3d-55c7-8320-7d89b67eb709",
"includeTagIds": [
"3b5a83f2-8dc2-467c-999a-3c029fb0b31e"
],
"createdBy": {
"id": "aa093746-5cbd-7b3b-8136-5794736f5a2f",
"name": "John Doe ",
"user": "johnd"
},
"createdAt": "2026-09-09T07:08:50.013",
"updatedBy": {
"id": "aa093746-5cbd-7b3b-8136-5794736f5a2f",
"name": "John Doe",
"user": "<username>"
},
"updatedAt": "2026-09-09T09:05:10.289",
"deleted": false,
"scope": "TAG_BASED"
}
]
New API: Create Patch Blocking Rule
| New or Updated API | New |
| API Endpoint | /pm/v1/blocking/rules |
| Method | POST |
| DTD or XSD changes | Not Applicable |
With this release, a new Create Patch Blocking Rule API to create a patch blocking rule based on specified criteria. Once created, rule identifies applicable patches and blocks them from deployment across the Windows and Linux platforms. A maximum of 10 blocking rules is allowed per platform.
Input ParametersInput Parameters
| Parameter | Sub Parameter | Mandatory/ Optional |
Data Type | Description |
|---|---|---|---|---|
| ruleName | Mandatory | String | Specify the name for the rule. Note: The rule name helps you identify the specific rule because of which the patches get skipped. |
|
| ruleReason | Mandatory | String | Specify a reason for which the blocking rule is created. | |
| criteria | type | Mandatory | Integer | Specify the type as 1. Note: Only the patch QQL type 1 is supported. |
| value | Mandatory | String | Specify the QQL token query. | |
| Platform | Mandatory | String | Specify the platform. Supported values are Windows and Linux. |
|
| Scope | Mandatory | String | Specify the scope. Supported values are GLOBAL and TAG_BASED. Note: The global scope is applicable for all assets. The tag-based scope applies only to assets included in the tag. |
|
| includeTagIds | Optional | String | Specify the tag ID for the tag to be included in the rule. Note: This parameter is mandatory if you select the TAG_BASED scope. |
Sample - Create a Patch Blocking RuleSample - Create a Patch Blocking Rule
API Request
curl -X 'POST' \
'<qualys_base_url>/pm/v1/blocking/rules' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <JWT_Token>
-H 'Content-Type: application/json' \
-d
API Body
'{
"ruleName": "Windows Blocking Rule",
"ruleReason": "Blocking few patches",
"criteria": {
"type": 1,
"value": "patch.publishedDate:[2026-05-01 ... now-5d] and patch.appFamily:`Visual C++`"
},
"platform": "Windows",
"includeTagIds": [],
"scope": "GLOBAL"
}'
API Response
{
"ruleId": "c003a69f-17d1-4a85-9ef7-2ef9f87aff2d",
"ruleName": "Windows Blocking Rule",
"ruleReason": "Blocking few patches",
"criteria": {
"type": 1,
"value": "patch.publishedDate:[2026-05-01 ... now-5d] and patch.appFamily:`Visual C++`"
},
"platform": "Windows",
"customerId": "5e35d0c5-ea3d-55c7-8320-7d89b67eb709",
"includeTagIds": [],
"createdBy": {
"id": "aa093746-5cbd-7b3b-8136-5794736f5a2f",
"name": "John Doe",
"user": "<username>"
},
"createdAt": "2026-09-10T03:54:44.883",
"updatedBy": null,
"updatedAt": null,
"deleted": false,
"scope": "GLOBAL"
}
New API: Get Patch Blocking Rule by ID
| New or Updated API | New |
| API Endpoint | /pm/v1/blocking/rules/{id} |
| Method | GET |
| DTD or XSD changes | Not Applicable |
With this release, a new Get Patch Blocking Rule by ID API is introduced, which helps to fetch a specific patch-blocking rule by its rule ID and view detailed information about it. This feature is supported on both Windows and Linux platforms.
Sample - Get a Patch Blocking Rule by IDSample - Get a Patch Blocking Rule by ID
API Request
curl -X 'GET' \
'<qualys_base_url>/pm/v1/blocking/rules/c003a69f-17d1-4a85-9ef7-2ef9f87aff2d?platform=Windows' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <JWT_Token>'
API Response
{
"ruleId": "c003a69f-17d1-4a85-9ef7-2ef9f87aff2d",
"ruleName": "Windows Blocking Rule",
"ruleReason": "Blocking few patches",
"criteria": {
"type": 1,
"value": "patch.publishedDate:[2026-05-01 ... now-5d] and patch.appFamily:`Visual C++`"
},
"platform": "Windows",
"customerId": "5e35d0c5-ea3d-55c7-8320-7d89b67eb709",
"includeTagIds": [],
"createdBy": {
"id": "aa093746-5cbd-7b3b-8136-5794736f5a2f",
"name": "John Doe",
"user": "<username>"
},
"createdAt": "2026-09-10T03:54:44.883",
"updatedBy": null,
"updatedAt": null,
"deleted": false,
"scope": "GLOBAL"
}
New API: Update Patch Blocking Rule by ID
| New or Updated API | New |
| API Endpoint | /pm/v1/blocking/rules/{id} |
| Method | PUT |
| DTD or XSD changes | Not Applicable |
With this release, a new Updated Patch Blocking Rule by ID is introduced that helps to update a patch blocking rule using its rule ID. This feature is supported on both Windows and Linux platforms.
Input ParametersInput Parameters
| Parameter | Sub Parameter | Mandatory/ Optional |
Data Type | Description |
|---|---|---|---|---|
| ruleName | Mandatory | String | Specify the name for the rule. Note: The rule name helps you identify the specific rule because of which the patches get skipped. |
|
| ruleReason | Mandatory | String | Specify a reason for which the blocking rule is created. | |
| criteria | type | Mandatory | Integer | Specify the type as 1. Note: Only the patch QQL type 1 is supported. |
| value | Mandatory | String | Specify the QQL token query. | |
| Platform | Mandatory | String | Specify the platform. Supported values are Windows and Linux. |
|
| Scope | Mandatory | String | Specify the scope. Supported values are GLOBAL and TAG_BASED. Note: The global scope is applicable for all assets. The tag-based scope applies only to assets included in the tag. |
|
| includeTagIds | Optional | String | Specify the tag ID for the tag to be included in the rule. Note: This parameter is mandatory if you select the TAG_BASED scope. |
Sample - Update a Patch Blocking Rule by IDSample - Update a Patch Blocking Rule by ID
API Request
curl -X 'PUT' \
'<qualys_base_url>/pm/v1/blocking/rules/c003a69f-17d1-4a85-9ef7-2ef9f87aff2d' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <JWT_Token>
-H 'Content-Type: application/json' \
-d '{
API Body
"ruleName": "Windows Blocking Rule",
"ruleReason": "Blocking few patches",
"criteria": {
"type": 1,
"value": "patch.publishedDate:[2026-05-01 ... now-5d] and patch.appFamily:`Visual C++`"
},
"platform": "Windows",
"includeTagIds": ["6ff0b36a-644a-4413-9d87-c2e35381db07"],
"scope": "TAG_BASED"
}'
API Response
Not documented for this release; the response follows the same schema shown in the corresponding Get/Create sample above.
New API: Delete Patch Blocking Rule by ID
| New or Updated API | New |
| API Endpoint | /pm/v1/blocking/rules/{id} |
| Method | DELETE |
| DTD or XSD changes | Not Applicable |
With this release, a new Delete Patch Blocking Rule by ID is introduced that helps to delete a patch blocking rule using its rule ID. This feature is supported on both Windows and Linux platforms.
Sample - Delete a Patch Blocking Rule by IDSample - Delete a Patch Blocking Rule by ID
API Request
curl -X 'DELETE' \
'<qualys_base_url>/pm/v1/blocking/rules/c003a69f-17d1-4a85-9ef7-2ef9f87aff2d?platform=Windows' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <JWT_Token>'
API Response
{
"deleted": true
}
New Feature
Approve Deployment Jobs Before They Run
What's New for You
You can now drive the deployment job approval workflow through the API; send a job for approval, approve, reject or revoke it, and review its approval history and status.
New API: Get Approval Status for a Deployment Job
| New or Updated API | New |
| API Endpoint | /pm/v1/deploymentjobs/<job-id>/approval |
| Method | Get |
| DTD or XSD changes | Not Applicable |
With this new API, you can check the history of actions and the status of the job approval, along with the comments provided by the job approver.
API Request
curl -X 'GET' \
'<qualys_base_url>/pm/v1/deploymentjobs/<job-id> /approval' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <JWT_Token>
API Response
[
{
"approvalStatus": "APPROVED",
"decisions": [
{
"userId": "47109f50-52b2-4cf5-8139-ad57491e7740",
"action": "REJECTED",
"comment": "Update job",
"createdDateTime": "2026-09-09T10:24:29.427+00:00",
"userName": "<username1>"
},
{
"userId": "30ce0a0f-05b4-db48-8296-b7dd8a6d2943",
"action": "PENDING_APPROVAL",
"comment": "Sending job for approval.",
"createdDateTime": "2026-09-09T10:23:27.669+00:00",
"userName": "<username2>"
},
{
"userId": "30ce0a0f-05b4-db48-8296-b7dd8a6d2943",
"action": "revoked",
"comment": "Approval automatically revoked because deployment job configuration was modified.",
"createdDateTime": "2026-09-09T10:12:59.369+00:00",
"userName": "<username3>"
},
{
"userId": "47109f50-52b2-4cf5-8139-ad57491e7740",
"action": "REJECTED",
"comment": "change schedule time",
"createdDateTime": "2026-09-09T10:11:50.141+00:00",
"userName": "<username4>"
},
{
"userId": "30ce0a0f-05b4-db48-8296-b7dd8a6d2943",
"action": "PENDING_APPROVAL",
"comment": "Sending job for approval.",
"createdDateTime": "2026-09-09T10:11:11.037+00:00",
"userName": "<username5>"
},
.........
.........
{
"userId": "30ce0a0f-05b4-db48-8296-b7dd8a6d2943",
"action": "revoked",
"comment": "Approval automatically revoked because deployment job configuration was modified.",
"createdDateTime": "2026-09-09T10:08:30.052+00:00",
"userName": "<username6>"
},
{
"userId": "47109f50-52b2-4cf5-8139-ad57491e7740",
"action": "REJECTED",
"comment": "Change scope",
"createdDateTime": "2026-09-09T10:07:14.947+00:00",
"userName": "<username7>"
},
{
"userId": "30ce0a0f-05b4-db48-8296-b7dd8a6d2943",
"action": "PENDING_APPROVAL",
"comment": "Sending job for approval.",
"createdDateTime": "2026-09-09T10:06:47.641+00:00",
"userName": "<username8>"
}
]
}
]
New API: Perform an Approval Action on a Deployment Job
| New or Updated API | New |
| API Endpoint | /pm/v1/deploymentjobs/<jobid>/approval |
| Method | POST |
| DTD or XSD changes | Not Applicable |
With this API, the job approver can approve or reject a pending job. The job owner can send a job for approval or revoke a pending approval request. APPROVED and REJECTED actions are performed by the job approver; PENDING_APPROVAL and REVOKED are performed by the job owner.
Input ParametersInput Parameters
| Parameter | Mandatory/ Optional |
Data Type | Description |
|---|---|---|---|
| action | Mandatory | String | These are the approval actions on the Job approver’s end and also statuses on the job owner's end. The supported values are APPROVED and REJECTED for the job approver and pending_APPPROVAL and REVOKED for the job owner. |
| comment | Optional | String | Specify a comment for the job owner to mention any specific comment of the reason why the job was rejected. |
Sample - Approve a Deployment JobSample - Approve a Deployment Job
API Request
curl -X 'POST' \
'<qualys_base_url>/pm/v1/deploymentjobs/<Job-id>/approval' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <JWT_Token>
-H 'Content-Type: application/json' \
API Body
{
"action": "APPROVED",
"comment": "The job is approved."
}
API Response
{
"approvalStatus": "APPROVED",
"id": "4e392bd0-7f4a-444d-af2d-8bf987817308"
}
Updated API: Create Deployment Job – Approval Flow Validation
| New or Updated API | Updated |
| API Endpoint | /pm/v2/deploymentjob |
| Method | POST |
| DTD or XSD changes | Not Applicable |
When the job approval workflow is enabled for a platform, this API is updated to reject a create job request unless the job is submitted with the status set to Disabled. An error message is displayed in the API response.
This response is generated with the existing API samples with the job Approval Workflow enabled.
API Request
curl -X 'POST' \
'<qualys_base_url>/pm/v2/deploymentjob' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <JWT_Token>
-H 'Content-Type: application/json' \
API Body
{
"approvedPatches": [
"15b4c30c-6b8e-380e-8c74-a0af9ef99ced"
],
"dynamicPatchesQQL": "",
"additionalDynamicPatchesQQL": "",
"additionalDynamicQQLType": "",
"isDynamicPatchesQQL": false,
"dynamicQQLType": 1,
"linkedJobId": "",
"assetCount": 1,
"assetIds": [
"734c35b7-5b26-4dc7-b56c-08c5a902c345"
],
"isAssetImported": false,
"assetFilePath": null,
"assetTagIds": [],
"assetDetectionsQQL": "",
"deleted": false,
"duringDeployment": {
"userMessage": "",
"description": ""
},
"name": "test-en-01-new",
"description": "",
"createdBy": null,
"patchCount": 1,
"postDeployment": {
"suppressreboots": false,
"rebootHonorOnUserLogin": false,
"onComplete": {
"userMessage": "",
"description": "",
"alwaysShowCompletedPrompt": false
},
"rebootCountdown": {
"interval": 15,
"intervalUnit": "MINUTES",
"userMessage": "Reboot countdown started",
"description": "The system reboot is initiated. It will reboot automatically after the timer countdown."
},
"rebootOption": {
"deferment": {
"count": null,
"interval": null,
"intervalUnit": "HOURS"
},
"userMessage": "",
"description": ""
}
},
"preDeployment": {
"deferment": {
"count": null,
"interval": null,
"intervalUnit": "HOURS"
},
"userMessage": "",
"description": ""
},
"recurring": false,
"dayOfMonth": null,
"recurringLastDayOfMonth": false,
"recurringDayOfMonth": null,
"patchTuesdayPlusXDays": null,
"monthlyRecurringType": null,
"recurringWeekDayOfMonth": null,
"recurringWeekDays": "",
"scheduleType": "On-demand",
"schemaVersion": "1.0",
"startDateTime": null,
"status": "Enabled",
"opportunisticdownloads": false,
"minimizeWindow": false,
"enableReattemptFailedPatches": false,
"reattemptFailedPatches": {
"noOfReattempts": 0,
"exponentialBackoffInterval": 0,
"exponentialBackoffIntervalUnit": "SECONDS"
},
"timeout": -1,
"timeoutUnit": "HOURS",
"runOnNextMaintenanceWindow": true,
"bypassMaintenanceWindow": false,
"timezone": null,
"timezoneType": null,
"type": "Install",
"filterType": "Any",
"exclusionFilterType": "Any",
"exclusionTagIds": [],
"matchAllTagIds": [],
"coAuthorUserIds": [],
"platform": "Windows",
"exclusionAssetIds": [],
"preDeployActions": [],
"postDeployActions": [],
"notification": null,
"remediationQids": [],
"isVulnContext": false,
"subCategory": "Patch",
"chainedJobRule": [],
"hostIsolationConfig": null,
"quarantineAssetRequestNotification": null,
"isDefaultJob": false,
"defaultJobConfiguration": {
"onAssetActivation": false,
"onAssetInactiveForXDays": null
},
"allowExecutionWithPendingReboot": false,
"customPatchURLId": null,
"downloadRandomizeTime": 0,
"downloadRandomizeTimeUnit": "MINUTES",
"jobCategory": null,
"jobSource": 2
}
API Response
Error Message =>
{
"_error": {
"code": 400,
"errorCode": "3157",
"message": "Cannot create job when approval flow is ON unless status is Disabled."
}
}
Updated API: Change Status of Deployment Job
| New or Updated API | Updated |
| API Endpoint | /pm/v1/deploymentjobs/update/status/{action} |
| Method | POST |
| DTD or XSD changes | Not Applicable |
This updated API now honors the job approval workflow. A job whose approval flow is turned on cannot be bulk-enabled until it has been approved; the response provides a per-job failure reason for any job that is still pending, rejected, or revoked.
This response is generated using the existing API samples, with the job Approval Workflow enabled.
Sample - Bulk-Enable Deployment JobsSample - Bulk-Enable Deployment Jobs
API Request
curl -X 'POST' \
'<qualys_base_url>/pm/v1/deploymentjobs/update/status/Enabled' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <JWT_Token>
-H 'Content-Type: application/json' \
API Body
{
"ids": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
"4rfcef64-2617-4562-eg3c-6h863f66afw3"
]
}
API Response
[
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "patch-job-1",
"status": "failure",
"error": "approval flow in enabled can not enable in bulk."
}
{
"id": "4rfcef64-2617-4562-eg3c-6h863f66afw3",
"name": "patch-job-2",
"status": "failure",
"error": "approval flow in enabled can not enable in bulk."
}
]
Updated API: Create Deployment Job (Windows)
| New or Updated API | Updated |
| API Endpoint | /pm/v2/deploymentjob |
| Method | POST |
| DTD or XSD changes | Not Applicable |
With this updated API, a new field approvalStatus is introduced in the API request that indicates the job approval status across the job execution flow. When this field is set to Pending_Approval status, the job is shown at the approver's end and will get executed after it is approved.
Input ParametersInput Parameters
| Parameter | Mandatory/ Optional |
Data Type | Description |
|---|---|---|---|
| approvalStatus | Optional | String | Specify the job approval status. This parameter indicates the approval status in the Job Approval Flow. When the job is created in disabled state with the approval status as “Pending Approval. The job is executed after approval. |
API Request
curl --location '<qualys_base_url>/pm/v2/deploymentjob' \
--header 'accept: application/json' \
--header 'Authorization: Bearer <JWT_Token>
--header 'Content-Type: application/json' \
--data
API Body
{
"approvalStatus": "PENDING_APPROVAL",
"approvedPatches": [
"36cd9d93-ffc8-333e-a467-b93aec9a1137"
],
"dynamicPatchesQQL": "",
"additionalDynamicPatchesQQL": "",
"additionalDynamicQQLType": "",
"isDynamicPatchesQQL": false,
"dynamicQQLType": 1,
"linkedJobId": "",
"assetCount": 1,
"assetIds": [
"734c35b7-5b26-4dc7-b56c-08c5a902c345"
],
"isAssetImported": false,
"assetFilePath": null,
"assetTagIds": [],
"assetDetectionsQQL": "",
"deleted": false,
"duringDeployment": {
"userMessage": "",
"description": ""
},
"name": "test-windows-ax",
"description": "",
"createdBy": null,
"patchCount": 1,
"postDeployment": {
"suppressreboots": false,
"rebootHonorOnUserLogin": false,
"onComplete": {
"userMessage": "",
"description": "",
"alwaysShowCompletedPrompt": false
},
"rebootCountdown": {
"interval": 15,
"intervalUnit": "MINUTES",
"userMessage": "Reboot countdown started",
"description": "The system reboot is initiated. It will reboot automatically after the timer countdown."
},
"rebootOption": {
"deferment": {
"count": null,
"interval": null,
"intervalUnit": "HOURS"
},
"userMessage": "",
"description": ""
}
},
"preDeployment": {
"deferment": {
"count": null,
"interval": null,
"intervalUnit": "HOURS"
},
"userMessage": "",
"description": ""
},
"recurring": false,
"dayOfMonth": null,
"recurringLastDayOfMonth": false,
"recurringDayOfMonth": null,
"patchTuesdayPlusXDays": null,
"monthlyRecurringType": null,
"recurringWeekDayOfMonth": null,
"recurringWeekDays": "",
"scheduleType": "On-demand",
"schemaVersion": "1.0",
"startDateTime": null,
"status": "Disabled",
"opportunisticdownloads": false,
"minimizeWindow": false,
"enableReattemptFailedPatches": false,
"reattemptFailedPatches": {
"noOfReattempts": 0,
"exponentialBackoffInterval": 0,
"exponentialBackoffIntervalUnit": "SECONDS"
},
"timeout": -1,
"timeoutUnit": "HOURS",
"runOnNextMaintenanceWindow": true,
"bypassMaintenanceWindow": false,
"timezone": null,
"timezoneType": null,
"type": "Install",
"filterType": "Any",
"exclusionFilterType": "Any",
"exclusionTagIds": [],
"matchAllTagIds": [],
"coAuthorUserIds": [],
"platform": "Windows",
"exclusionAssetIds": [],
"preDeployActions": [],
"postDeployActions": [
{
"action": "Run Script",
"params": {
"actionItem": "test-actions",
"carScriptDetails": {
"carScriptCategory": "",
"carScriptDescription": "",
"carScriptId": "",
"carScriptLanguage": "",
"carScriptPlatform": "",
"carScriptQid": "",
"carScriptSource": "",
"carScriptStatus": "",
"carScriptSubType": "",
"carScriptTitle": "",
"carScriptType": "",
"scriptType": "Patch"
},
"fileChecksum": "",
"remediationScope": false,
"defaultScriptType": ""
},
"scriptType": "ps",
"script": "ZWNobyBoZWxsbw=="
}
],
"notification": null,
"remediationQids": [],
"isVulnContext": false,
"subCategory": "Patch",
"chainedJobRule": [],
"hostIsolationConfig": null,
"quarantineAssetRequestNotification": null,
"isDefaultJob": false,
"defaultJobConfiguration": {
"onAssetActivation": false,
"onAssetInactiveForXDays": null
},
"allowExecutionWithPendingReboot": false,
"customPatchURLId": null,
"downloadRandomizeTime": 0,
"downloadRandomizeTimeUnit": "MINUTES",
"jobCategory": null,
"jobSource": 2
}
API Response
{
"id": "b68ed442-b431-4cec-a7b2-14c756043b6e",
"schemaVersion": "1.0",
"name": "test-windows-ax",
"immediate": null,
"type": "Install",
"status": "Disabled",
"assetIds": [
"734c35b7-5b26-4dc7-b56c-08c5a902c345"
],
"assetTagIds": [],
"matchAllTagIds": [],
"exclusionTagIds": [],
"disabledPatches": null,
"exclusionAssetIds": [],
"coAuthorUserIds": [],
"approvedPatches": [
"36cd9d93-ffc8-333e-a467-b93aec9a1137"
],
"description": "",
"patchCount": 1,
"assetCount": null,
"scheduleType": "On-demand",
"startDateTime": "2026-9-10 05:46:33 AM",
"recurring": false,
"recurringWeekDays": "",
"dayOfMonth": null,
"recurringDayOfMonth": null,
"recurringWeekDayOfMonth": null,
"timezoneType": "SPECIFIC_TZ",
"timezone": "UTC",
"timeout": -1,
"timeoutUnit": "HOURS",
"preDeployment": {
"userMessage": "",
"deferment": {
"count": 0,
"interval": 0,
"intervalUnit": "HOURS"
},
"description": ""
},
"duringDeployment": {
"userMessage": "",
"description": ""
},
"postDeployment": {
"rebootHonorOnUserLogin": false,
"rebootOption": {
"userMessage": "",
"description": "",
"deferment": {
"count": 0,
"interval": 0,
"intervalUnit": "HOURS"
}
},
"rebootCountdown": {
"interval": 15,
"intervalUnit": "MINUTES",
"userMessage": "Reboot countdown started",
"description": "The system reboot is initiated. It will reboot automatically after the timer countdown."
},
"onComplete": {
"userMessage": "",
"description": "",
"alwaysShowCompletedPrompt": false
},
"suppressreboots": false
},
"createdBy": {
"user": {
"id": "0b435571-e4d1-6ad6-80be-b2720798867a",
"name": "quays_an11",
"fullName": "Ratnakar Chavan"
},
"date": "1789019193093",
"context": null
},
"updatedBy": {
"user": null,
"date": null,
"context": null
},
"deletedBy": {
"user": null,
"date": null,
"context": null
},
"tags": null,
"matchAllTags": null,
"patchesList": null,
"assetsList": null,
"exclusionAssetList": null,
"exclusionTags": null,
"directAssetCount": 0,
"taggedAssetCount": 0,
"filterType": "Any",
"exclusionFilterType": "Any",
"minimizeWindow": false,
"startDateTimeEpoch": 0,
"platform": "Windows",
"continueOnPatchFailure": false,
"dynamicPatchesQQL": "",
"isDynamicPatchesQQL": false,
"assetDetectionsQQL": "",
"preDeployActions": null,
"postDeployActions": [
{
"actionId": "6ff1e834-b42e-4f2b-9648-4cc4fdd6ed13",
"params": {
"actionItem": "test-actions",
"downloadURL": null,
"fileChecksum": "",
"installMethod": null,
"installOptions": null,
"regKey": null,
"regValueType": null,
"regValue": null,
"regKeyAddNew": null,
"unInstallSoftwareDisplayName": null,
"unInstallSoftwareVersion": null,
"unInstallSoftwareVersionMatch": null,
"unInstallRegistryKey": null,
"mitigationCategory": null,
"qid": null,
"qidDetectionId": null,
"qidTitle": null,
"hostVulnId": null,
"assetName": null,
"assetPlatform": null,
"assetOperatingSystem": null,
"service": null,
"port": null,
"protocol": null,
"fqdn": null,
"qds": null,
"ssl": null,
"assetId": null,
"assetUUID": null,
"detectionScoreMin": null,
"detectionScoreMax": null,
"carScriptDetails": null,
"remediationScope": false,
"carScriptId": null,
"defaultScriptType": "",
"isUploadedToCDN": null,
"encodedId": null,
"fileName": null,
"fileSize": null,
"fileType": null
},
"script": "13cc42b0-82d7-74a7-8254-26d7791f9970/6ff1e834-b42e-4f2b-9648-4cc4fdd6ed13/Script",
"detectionScript": null,
"scriptType": "ps",
"detectionScriptType": null,
"action": "Run Script",
"mitigationList": null,
"actionLinkedToJob": false
}
],
"applicableAssetCount": 1,
"dynamicQQLType": 1,
"monthlyRecurringType": null,
"patchTuesdayPlusXDays": null,
"recurringLastDayOfMonth": false,
"jobCategory": 3,
"jobSource": 2,
"completionPercent": null,
"totalAssetCount": null,
"assetResultReceivedCount": null,
"notification": null,
"latestApproval": null,
"linkedJobId": null,
"linkedToJob": null,
"linkedJobs": null,
"jobStartCountdown": null,
"passwordAction": null,
"subCategory": "Patch",
"additionalDynamicPatchesQQL": null,
"additionalDynamicQQLType": null,
"downloadRandomizeTime": 0,
"downloadRandomizeTimeUnit": "MINUTES",
"customPatchURLId": null,
"isVulnContext": false,
"remediationQids": [],
"remediationCves": null,
"etmFilters": null,
"isAssetImported": false,
"chainedJobRule": null,
"quarantineAssetRequestNotification": null,
"hostIsolationConfig": null,
"enableReattemptFailedPatches": false,
"reattemptFailedPatches": {
"noOfReattempts": 0,
"exponentialBackoffInterval": 0,
"exponentialBackoffIntervalUnit": "SECONDS"
},
"allowExecutionWithPendingReboot": false,
"isDefaultJob": false,
"defaultJobConfiguration": {
"onAssetActivation": false,
"onAssetInactiveForXDays": null
},
"runOnNextMaintenanceWindow": true,
"bypassMaintenanceWindow": false,
"approvalStatus": "PENDING_APPROVAL",
"opportunisticdownloads": false
}
Updated API: Update Deployment Job (Windows)
| New or Updated API | Updated |
| API Endpoint | /pm/v2/deploymentjob/update/{deploymentJobId} |
| Method | PATCH |
| DTD or XSD changes | Not Applicable |
This updated API now supports the job approval workflow for Windows rollback deployment jobs with the new approvalStatus approval. The approval workflow feature is also supported for the Linux platform.
API Request
curl -X PATCH
"https://<qualys_base_url>/pm/v2/deploymentjob/update/<job_id>"
-H "accept: application/json"
-H "Authorization: Bearer <JWT_Token>"
-H "Content-Type: application/json
API Body
{
"approvalStatus": "REVOKED",
"approvedPatches": [
"36cd9d93-ffc8-333e-a467-b93aec9a1137"
],
"dynamicPatchesQQL": "",
"additionalDynamicPatchesQQL": "",
"additionalDynamicQQLType": "",
"isDynamicPatchesQQL": false,
"dynamicQQLType": 1,
"linkedJobId": "",
"assetCount": 1,
"assetIds": [
"734c35b7-5b26-4dc7-b56c-08c5a902c345"
],
"isAssetImported": false,
"assetFilePath": null,
"assetTagIds": [],
"assetDetectionsQQL": "",
"deleted": false,
"duringDeployment": {
"userMessage": "",
"description": ""
},
"name": "test-windows-ax",
"description": "",
"createdBy": {
"user": {
"id": "0b435571-e4d1-6ad6-80be-b2720798867a",
"name": "johndoe",
"fullName": "John Doe"
},
"date": "1789019193093",
"context": null
},
"patchCount": 1,
"postDeployment": {
"suppressreboots": false,
"onComplete": {
"userMessage": "",
"description": "",
"alwaysShowCompletedPrompt": false
},
"rebootCountdown": {
"interval": 15,
"intervalUnit": "MINUTES",
"userMessage": "Reboot countdown started",
"description": "The system reboot is initiated. It will reboot automatically after the timer countdown."
},
"rebootOption": {
"deferment": {
"count": null,
"interval": null,
"intervalUnit": "HOURS"
},
"userMessage": "",
"description": ""
}
},
"preDeployment": {
"deferment": {
"count": null,
"interval": null,
"intervalUnit": "HOURS"
},
"userMessage": "",
"description": ""
},
"recurring": false,
"dayOfMonth": null,
"recurringLastDayOfMonth": false,
"recurringDayOfMonth": null,
"patchTuesdayPlusXDays": null,
"monthlyRecurringType": null,
"recurringWeekDayOfMonth": null,
"recurringWeekDays": "",
"scheduleType": "On-demand",
"schemaVersion": "1.0",
"startDateTime": null,
"status": "Disabled",
"opportunisticdownloads": false,
"minimizeWindow": false,
"enableReattemptFailedPatches": false,
"reattemptFailedPatches": {
"noOfReattempts": 0,
"exponentialBackoffInterval": 0,
"exponentialBackoffIntervalUnit": "SECONDS"
},
"timeout": -1,
"timeoutUnit": "HOURS",
"runOnNextMaintenanceWindow": true,
"bypassMaintenanceWindow": false,
"timezone": null,
"timezoneType": null,
"type": "Install",
"filterType": "Any",
"exclusionFilterType": "Any",
"exclusionTagIds": [],
"matchAllTagIds": [],
"coAuthorUserIds": [],
"platform": "Windows",
"exclusionAssetIds": [],
"preDeployActions": [
{
"action": "Run Script",
"params": {
"actionItem": "test",
"carScriptDetails": {
"carScriptCategory": "",
"carScriptDescription": "",
"carScriptId": "",
"carScriptLanguage": "",
"carScriptPlatform": "",
"carScriptQid": "",
"carScriptSource": "",
"carScriptStatus": "",
"carScriptSubType": "",
"carScriptTitle": "",
"carScriptType": "",
"scriptType": "Patch"
},
"fileChecksum": "",
"remediationScope": false,
"defaultScriptType": ""
},
"scriptType": "ps",
"script": "ZWNobyBoZWxsbw=="
}
],
"postDeployActions": [
{
"actionId": "6ff1e834-b42e-4f2b-9648-4cc4fdd6ed13",
"params": {
"actionItem": "test-actions",
"downloadURL": null,
"fileChecksum": "",
"installMethod": null,
"installOptions": null,
"regKey": null,
"regValueType": null,
"regValue": null,
"regKeyAddNew": null,
"unInstallSoftwareDisplayName": null,
"unInstallSoftwareVersion": null,
"unInstallSoftwareVersionMatch": null,
"unInstallRegistryKey": null,
"mitigationCategory": null,
"qid": null,
"qidDetectionId": null,
"qidTitle": null,
"hostVulnId": null,
"assetName": null,
"assetPlatform": null,
"assetOperatingSystem": null,
"service": null,
"port": null,
"protocol": null,
"fqdn": null,
"qds": null,
"ssl": null,
"assetId": null,
"assetUUID": null,
"detectionScoreMin": null,
"detectionScoreMax": null,
"carScriptDetails": null,
"remediationScope": false,
"carScriptId": null,
"defaultScriptType": "",
"isUploadedToCDN": null,
"encodedId": null,
"fileName": null,
"fileSize": null,
"fileType": null
},
"script": "ZWNobyBoZWxsbw==",
"detectionScript": null,
"scriptType": "ps",
"detectionScriptType": null,
"action": "Run Script",
"mitigationList": null,
"actionLinkedToJob": false
}
],
"notification": null,
"remediationQids": [],
"isVulnContext": false,
"subCategory": "Patch",
"chainedJobRule": [],
"hostIsolationConfig": null,
"quarantineAssetRequestNotification": null,
"isDefaultJob": false,
"defaultJobConfiguration": {
"onAssetActivation": false,
"onAssetInactiveForXDays": null
},
"allowExecutionWithPendingReboot": false,
"customPatchURLId": null,
"downloadRandomizeTime": 0,
"downloadRandomizeTimeUnit": "MINUTES",
"jobCategory": 3,
"jobSource": 2
}
API Response
{
"id": "b68ed442-b431-4cec-a7b2-14c756043b6e",
"schemaVersion": "1.0",
"name": "test-windows-ax",
"immediate": null,
"type": "Install",
"status": "Disabled",
"assetIds": [
"734c35b7-5b26-4dc7-b56c-08c5a902c345"
],
"assetTagIds": [],
"matchAllTagIds": [],
"exclusionTagIds": [],
"disabledPatches": null,
"exclusionAssetIds": [],
"coAuthorUserIds": [],
"approvedPatches": [
"36cd9d93-ffc8-333e-a467-b93aec9a1137"
],
"description": "",
"patchCount": 1,
"assetCount": null,
"scheduleType": "On-demand",
"startDateTime": null,
"recurring": false,
"recurringWeekDays": "",
"dayOfMonth": null,
"recurringDayOfMonth": null,
"recurringWeekDayOfMonth": null,
"timezoneType": null,
"timezone": null,
"timeout": -1,
"timeoutUnit": "HOURS",
"preDeployment": {
"userMessage": "",
"deferment": {
"count": 0,
"interval": 0,
"intervalUnit": "HOURS"
},
"description": ""
},
"duringDeployment": {
"userMessage": "",
"description": ""
},
"postDeployment": {
"rebootHonorOnUserLogin": false,
"rebootOption": {
"userMessage": "",
"description": "",
"deferment": {
"count": 0,
"interval": 0,
"intervalUnit": "HOURS"
}
},
"rebootCountdown": {
"interval": 15,
"intervalUnit": "MINUTES",
"userMessage": "Reboot countdown started",
"description": "The system reboot is initiated. It will reboot automatically after the timer countdown."
},
"onComplete": {
"userMessage": "",
"description": "",
"alwaysShowCompletedPrompt": false
},
"suppressreboots": false
},
"createdBy": {
"user": {
"id": "0b435571-e4d1-6ad6-80be-b2720798867a",
"name": "quays_an11",
"fullName": "Ratnakar Chavan"
},
"date": "1789019193093",
"context": null
},
"updatedBy": {
"user": {
"id": "0b435571-e4d1-6ad6-80be-b2720798867a",
"name": "quays_an11",
"fullName": null
},
"date": "1789020994842",
"context": null
},
"deletedBy": null,
"tags": null,
"matchAllTags": null,
"patchesList": null,
"assetsList": null,
"exclusionAssetList": null,
"exclusionTags": null,
"directAssetCount": 0,
"taggedAssetCount": 0,
"filterType": "Any",
"exclusionFilterType": "Any",
"minimizeWindow": false,
"startDateTimeEpoch": 0,
"platform": "Windows",
"continueOnPatchFailure": false,
"dynamicPatchesQQL": "",
"isDynamicPatchesQQL": false,
"assetDetectionsQQL": "",
"preDeployActions": [
{
"actionId": "00c1fbec-44f9-479e-ab6c-c8502f6588b0",
"params": {
"actionItem": "test",
"downloadURL": null,
"fileChecksum": "",
"installMethod": null,
"installOptions": null,
"regKey": null,
"regValueType": null,
"regValue": null,
"regKeyAddNew": null,
"unInstallSoftwareDisplayName": null,
"unInstallSoftwareVersion": null,
"unInstallSoftwareVersionMatch": null,
"unInstallRegistryKey": null,
"mitigationCategory": null,
"qid": null,
"qidDetectionId": null,
"qidTitle": null,
"hostVulnId": null,
"assetName": null,
"assetPlatform": null,
"assetOperatingSystem": null,
"service": null,
"port": null,
"protocol": null,
"fqdn": null,
"qds": null,
"ssl": null,
"assetId": null,
"assetUUID": null,
"detectionScoreMin": null,
"detectionScoreMax": null,
"carScriptDetails": {
"id": 0,
"carScriptId": "",
"carScriptQid": "",
"carScriptType": "",
"carScriptPlatform": "",
"carScriptSource": "",
"carScriptCategory": "",
"carScriptSubtype": null,
"scriptType": "Patch"
},
"remediationScope": false,
"carScriptId": null,
"defaultScriptType": "",
"isUploadedToCDN": null,
"encodedId": null,
"fileName": null,
"fileSize": null,
"fileType": null
},
"script": "13cc42b0-82d7-74a7-8254-26d7791f9970/00c1fbec-44f9-479e-ab6c-c8502f6588b0/Script",
"detectionScript": null,
"scriptType": "ps",
"detectionScriptType": null,
"action": "Run Script",
"mitigationList": null,
"actionLinkedToJob": false
}
],
"postDeployActions": [
{
"actionId": "6ff1e834-b42e-4f2b-9648-4cc4fdd6ed13",
"params": {
"actionItem": "test-actions",
"downloadURL": null,
"fileChecksum": "",
"installMethod": null,
"installOptions": null,
"regKey": null,
"regValueType": null,
"regValue": null,
"regKeyAddNew": null,
"unInstallSoftwareDisplayName": null,
"unInstallSoftwareVersion": null,
"unInstallSoftwareVersionMatch": null,
"unInstallRegistryKey": null,
"mitigationCategory": null,
"qid": null,
"qidDetectionId": null,
"qidTitle": null,
"hostVulnId": null,
"assetName": null,
"assetPlatform": null,
"assetOperatingSystem": null,
"service": null,
"port": null,
"protocol": null,
"fqdn": null,
"qds": null,
"ssl": null,
"assetId": null,
"assetUUID": null,
"detectionScoreMin": null,
"detectionScoreMax": null,
"carScriptDetails": null,
"remediationScope": false,
"carScriptId": null,
"defaultScriptType": "",
"isUploadedToCDN": null,
"encodedId": null,
"fileName": null,
"fileSize": null,
"fileType": null
},
"script": "13cc42b0-82d7-74a7-8254-26d7791f9970/6ff1e834-b42e-4f2b-9648-4cc4fdd6ed13/Script",
"detectionScript": null,
"scriptType": "ps",
"detectionScriptType": null,
"action": "Run Script",
"mitigationList": null,
"actionLinkedToJob": false
}
],
"applicableAssetCount": 1,
"dynamicQQLType": 1,
"monthlyRecurringType": null,
"patchTuesdayPlusXDays": null,
"recurringLastDayOfMonth": false,
"jobCategory": 3,
"jobSource": 2,
"completionPercent": null,
"totalAssetCount": null,
"assetResultReceivedCount": null,
"notification": null,
"latestApproval": null,
"linkedJobId": null,
"linkedToJob": null,
"linkedJobs": null,
"jobStartCountdown": null,
"passwordAction": null,
"subCategory": "Patch",
"additionalDynamicPatchesQQL": null,
"additionalDynamicQQLType": null,
"downloadRandomizeTime": 0,
"downloadRandomizeTimeUnit": "MINUTES",
"customPatchURLId": null,
"isVulnContext": false,
"remediationQids": [],
"remediationCves": null,
"etmFilters": null,
"isAssetImported": false,
"chainedJobRule": null,
"quarantineAssetRequestNotification": null,
"hostIsolationConfig": null,
"enableReattemptFailedPatches": false,
"reattemptFailedPatches": {
"noOfReattempts": 0,
"exponentialBackoffInterval": 0,
"exponentialBackoffIntervalUnit": "SECONDS"
},
"allowExecutionWithPendingReboot": false,
"isDefaultJob": false,
"defaultJobConfiguration": {
"onAssetActivation": false,
"onAssetInactiveForXDays": null
},
"runOnNextMaintenanceWindow": true,
"bypassMaintenanceWindow": false,
"approvalStatus": "REVOKED",
"opportunisticdownloads": false
}
Updated API: Create Deployment Rollback Job (Windows)
| New or Updated API | Updated |
| API Endpoint | /pm/v2/deploymentjob |
| Method | POST |
| DTD or XSD changes | Not Applicable |
This updated API now supports the job approval workflow for Windows rollback deployment jobs. A new field approvalStatus is intoduced in the API request. The approval workflow feature is also supported for Linux platform.
API Request
curl --location '<qualys_base_url>/pm/v2/deploymentjob' \
--header 'accept: application/json' \
--header 'Authorization: Bearer <JWT_Token>
--header 'Content-Type: application/json' \
--data
API Body
{
"approvalStatus": "PENDING_APPROVAL",
"approvedPatches": [
"bcc2cee3-736d-3c6f-a4d9-9f3b392d2e56"
],
"dynamicPatchesQQL": "",
"additionalDynamicPatchesQQL": "",
"additionalDynamicQQLType": "",
"isDynamicPatchesQQL": false,
"dynamicQQLType": 1,
"linkedJobId": "",
"assetCount": 1,
"assetIds": [
"734c35b7-5b26-4dc7-b56c-08c5a902c345"
],
"isAssetImported": false,
"assetFilePath": null,
"assetTagIds": [],
"assetDetectionsQQL": "",
"deleted": false,
"duringDeployment": {
"userMessage": "",
"description": ""
},
"name": "test-roll-ax",
"description": "",
"createdBy": null,
"patchCount": 1,
"postDeployment": {
"suppressreboots": false,
"rebootHonorOnUserLogin": false,
"onComplete": {
"userMessage": "",
"description": "",
"alwaysShowCompletedPrompt": false
},
"rebootCountdown": {
"interval": 15,
"intervalUnit": "MINUTES",
"userMessage": "Reboot countdown started",
"description": "The system reboot is initiated. It will reboot automatically after the timer countdown."
},
"rebootOption": {
"deferment": {
"count": null,
"interval": null,
"intervalUnit": "HOURS"
},
"userMessage": "",
"description": ""
}
},
"preDeployment": {
"deferment": {
"count": null,
"interval": null,
"intervalUnit": "HOURS"
},
"userMessage": "",
"description": ""
},
"recurring": false,
"dayOfMonth": null,
"recurringLastDayOfMonth": false,
"recurringDayOfMonth": null,
"patchTuesdayPlusXDays": null,
"monthlyRecurringType": null,
"recurringWeekDayOfMonth": null,
"recurringWeekDays": "",
"scheduleType": "On-demand",
"schemaVersion": "1.0",
"startDateTime": null,
"status": "Disabled",
"opportunisticdownloads": false,
"minimizeWindow": false,
"enableReattemptFailedPatches": false,
"reattemptFailedPatches": {
"noOfReattempts": 0,
"exponentialBackoffInterval": 0,
"exponentialBackoffIntervalUnit": "SECONDS"
},
"timeout": -1,
"timeoutUnit": "HOURS",
"runOnNextMaintenanceWindow": true,
"bypassMaintenanceWindow": false,
"timezone": null,
"timezoneType": null,
"type": "Rollback",
"filterType": "Any",
"exclusionFilterType": "Any",
"exclusionTagIds": [],
"matchAllTagIds": [],
"coAuthorUserIds": [],
"platform": "Windows",
"exclusionAssetIds": [],
"preDeployActions": [],
"postDeployActions": [],
"notification": null,
"remediationQids": [],
"isVulnContext": false,
"subCategory": "Patch",
"chainedJobRule": [],
"hostIsolationConfig": null,
"quarantineAssetRequestNotification": null,
"isDefaultJob": false,
"defaultJobConfiguration": {
"onAssetActivation": false,
"onAssetInactiveForXDays": null
},
"allowExecutionWithPendingReboot": false,
"customPatchURLId": null,
"downloadRandomizeTime": 0,
"downloadRandomizeTimeUnit": "MINUTES",
"jobCategory": null,
"jobSource": 2
}
API Response
{
"id": "65e7624a-91f4-4b4d-bb28-8681a99b6e50",
"schemaVersion": "1.0",
"name": "test-roll-ax",
"immediate": null,
"type": "Rollback",
"status": "Disabled",
"assetIds": [
"734c35b7-5b26-4dc7-b56c-08c5a902c345"
],
"assetTagIds": [],
"matchAllTagIds": [],
"exclusionTagIds": [],
"disabledPatches": null,
"exclusionAssetIds": [],
"coAuthorUserIds": [],
"approvedPatches": [
"bcc2cee3-736d-3c6f-a4d9-9f3b392d2e56"
],
"description": "",
"patchCount": 1,
"assetCount": null,
"scheduleType": "On-demand",
"startDateTime": "2026-9-10 06:30:33 AM",
"recurring": false,
"recurringWeekDays": "",
"dayOfMonth": null,
"recurringDayOfMonth": null,
"recurringWeekDayOfMonth": null,
"timezoneType": "SPECIFIC_TZ",
"timezone": "UTC",
"timeout": -1,
"timeoutUnit": "HOURS",
"preDeployment": {
"userMessage": "",
"deferment": {
"count": 0,
"interval": 0,
"intervalUnit": "HOURS"
},
"description": ""
},
"duringDeployment": {
"userMessage": "",
"description": ""
},
"postDeployment": {
"rebootHonorOnUserLogin": false,
"rebootOption": {
"userMessage": "",
"description": "",
"deferment": {
"count": 0,
"interval": 0,
"intervalUnit": "HOURS"
}
},
"rebootCountdown": {
"interval": 15,
"intervalUnit": "MINUTES",
"userMessage": "Reboot countdown started",
"description": "The system reboot is initiated. It will reboot automatically after the timer countdown."
},
"onComplete": {
"userMessage": "",
"description": "",
"alwaysShowCompletedPrompt": false
},
"suppressreboots": false
},
"createdBy": {
"user": {
"id": "0b435571-e4d1-6ad6-80be-b2720798867a",
"name": "quays_an11",
"fullName": "Ratnakar Chavan"
},
"date": "1789021832752",
"context": null
},
"updatedBy": {
"user": null,
"date": null,
"context": null
},
"deletedBy": {
"user": null,
"date": null,
"context": null
},
"tags": null,
"matchAllTags": null,
"patchesList": null,
"assetsList": null,
"exclusionAssetList": null,
"exclusionTags": null,
"directAssetCount": 0,
"taggedAssetCount": 0,
"filterType": "Any",
"exclusionFilterType": "Any",
"minimizeWindow": false,
"startDateTimeEpoch": 0,
"platform": "Windows",
"continueOnPatchFailure": false,
"dynamicPatchesQQL": "",
"isDynamicPatchesQQL": false,
"assetDetectionsQQL": "",
"preDeployActions": null,
"postDeployActions": null,
"applicableAssetCount": 1,
"dynamicQQLType": 1,
"monthlyRecurringType": null,
"patchTuesdayPlusXDays": null,
"recurringLastDayOfMonth": false,
"jobCategory": 3,
"jobSource": 2,
"completionPercent": null,
"totalAssetCount": null,
"assetResultReceivedCount": null,
"notification": null,
"latestApproval": null,
"linkedJobId": null,
"linkedToJob": null,
"linkedJobs": null,
"jobStartCountdown": null,
"passwordAction": null,
"subCategory": "Patch",
"additionalDynamicPatchesQQL": null,
"additionalDynamicQQLType": null,
"downloadRandomizeTime": 0,
"downloadRandomizeTimeUnit": "MINUTES",
"customPatchURLId": null,
"isVulnContext": false,
"remediationQids": [],
"remediationCves": null,
"etmFilters": null,
"isAssetImported": false,
"chainedJobRule": null,
"quarantineAssetRequestNotification": null,
"hostIsolationConfig": null,
"enableReattemptFailedPatches": false,
"reattemptFailedPatches": {
"noOfReattempts": 0,
"exponentialBackoffInterval": 0,
"exponentialBackoffIntervalUnit": "SECONDS"
},
"allowExecutionWithPendingReboot": false,
"isDefaultJob": false,
"defaultJobConfiguration": {
"onAssetActivation": false,
"onAssetInactiveForXDays": null
},
"runOnNextMaintenanceWindow": true,
"bypassMaintenanceWindow": false,
"approvalStatus": "PENDING_APPROVAL",
"opportunisticdownloads": false
}
Updated API: Create Mitigation Job (Windows)
| New or Updated API | Updated |
| API Endpoint | /mtg/v2/deploymentjob |
| Method | POST |
| DTD or XSD changes | Not Applicable |
With this updated API, a new field approvalStatus is introduced in the API request that indicates the job approval status across the job execution flow. When this field is set to Pending_Approval status, the job is shown at the approver's end and will get executed after it is approved.
Input ParametersInput Parameters
| Parameter | Mandatory/ Optional |
Data Type | Description |
|---|---|---|---|
| approvalStatus | Optional | String | Specify the job approval status. This parameter indicates the approval status in the Job Approval Flow. When the job is created in disabled state with the approval status as “Pending Approval. The job is executed after approval. |
API Request
curl -X 'POST' \
'<qualys_base_url>/mtg/v2/deploymentjob' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <JWT_Token>' \
-H 'Content-Type: application/json' \
-d'
API Body
{
"approvalStatus":"PENDING_APPROVAL",
"qids": [
90007,90043
],
"assetIds": [
"28e69c01-8e59-4520-83da-a934becf9d88"
],
"assetTagIds":[
"576b4fab-2682-433e-b3e6-c4ea9861ae75"
],
"name": "Windows_MTG_OnDemand_Job",
"description": "Test Windows On-Demand Mitigation Job",
"scheduleType": "On-demand",
"schemaVersion": "1.0",
"status": "Enabled",
"type": "Install",
"filterType": "Any",
"exclusionFilterType": "Any",
"platform": "Windows",
"notification": {
"notificationTypes": {
"email": true
},
"notificationConfigs": {
"recipientEmails": "[email protected],[email protected]",
"completedPercentage": 80
},
"notificationEvents": {
"onJobStart": true,
"onJobComplete": true
}
}
}'
API Response
{
"customerId": "bbb55e58-b06f-fd7b-81b8-92a7c5407282",
"id": "756aa782-8f11-4468-8e68-d1db74c7203e",
"schemaVersion": "1.0",
"name": "Windows_MTG_OnDemand_Job",
"description": "Test Windows On-Demand Mitigation Job",
"type": "Install",
"status": "Enabled",
"coAuthorUserIds": null,
"scheduleType": "On-demand",
"startDateTime": "2026-1-23 04:27:51 AM",
"recurring": false,
"timezoneType": "SPECIFIC_TZ",
"timezone": "UTC",
"createdBy": {
"user": {
"id": "f080cf76-0de1-fd80-826c-ea22cf7da868",
"name": "<username>",
"fullName": "John Doe"
},
"date": 1769142471331,
"context": null
},
"updatedBy": {
"user": null,
"date": null,
"context": null
},
"deletedBy": {
"user": null,
"date": null,
"context": null
},
"assetCount": null,
"taggedAssetCount": 0,
"applicableAssetCount": 1,
"totalAssetCount": null,
"assetResultReceivedCount": null,
"jobCategory": 3,
"jobTriggerStatus": null,
"completionPercent": null,
"jobSource": 3,
"readOnly": false,
"subCategory": "Mitigation",
"platform": "Windows",
"assetTagIds": [
"576b4fab-2682-433e-b3e6-c4ea9861ae75"
],
"assetIds": [
"28e69c01-8e59-4520-83da-a934becf9d88"
],
"matchAllTagIds": null,
"exclusionTagIds": null,
"filterType": "Any",
"exclusionFilterType": "Any",
"notification": {
"notificationTypes": {
"email": true
},
"notificationConfigs": {
"recipientEmails": "[email protected],[email protected]",
"completedPercentage": "80"
},
"notificationEvents": {
"onJobStart": true,
"onJobComplete": true
}
},
"assetDetectionsQQL": "(tags.uuid: [576b4fab-2682-433e-b3e6-c4ea9861ae75]) OR (agentId: [28e69c01-8e59-4520-83da-a934becf9d88]) AND trackingMethod:QAGENT",
"preDeployActions": [
{
"actionId": "1e8b264f-6689-426b-a395-ca288e554781",
"action": "Apply Mitigation",
"actionType": "predeploy",
"params": {
"timeout": 180,
"mitigationCategory": "Script-based Virtual Patch",
"qid": 90007,
"qidDetectionId": 0,
"hostVulnId": 0
},
"mitigationList": [
{
"cves": [
"90007"
],
"mitigationId": "d7e1f429-e0bd-4aac-83d2-ffabbb25e084",
"mitigationType": "Registry Update",
"mitigationSource": null,
"carScriptId": 263935419,
"customCdnUrl": "",
"signatureHashCode": "",
"impactFactor": 0,
"implication": 1
}
],
"actionLinkedToJob": false
},
{
"actionId": "ae7631c7-e0af-441f-81e4-cd88a340ed2e",
"action": "Apply Mitigation",
"actionType": "predeploy",
"params": {
"timeout": 180,
"mitigationCategory": "Script-based Virtual Patch",
"qid": 90043,
"qidDetectionId": 0,
"hostVulnId": 0
},
"mitigationList": [
{
"cves": [
"90043"
],
"mitigationId": "99138ea7-1f1a-4ec8-a755-927913c3ee11",
"mitigationType": "Registry Update",
"mitigationSource": null,
"carScriptId": 934571954,
"customCdnUrl": "",
"signatureHashCode": "",
"impactFactor": 0,
"implication": 1
}
],
"actionLinkedToJob": false
}
],
"postDeployActions": null,
"vulnQQL": "vulnerabilities.vulnerability.qid:[90007, 90043]"
"latestApproval": null,
"approvalStatus": "PENDING_APPROVAL",
}
Updated API: Update Deployment Rollback Job (Windows)
| New or Updated API | Updated |
| API Endpoint | /pm/v2/deploymentjob/update/{deploymentJobId} |
| Method | PATCH |
| DTD or XSD changes | Not Applicable |
This API now supports the job approval workflow when updating a Windows rollback deployment job. See approvalStatus in the Input Parameters below.
Sample - Update a Windows Rollback Deployment Job with Approval StatusSample - Update a Windows Rollback Deployment Job with Approval Status
API Request
curl -X PATCH
"https://<qualys_base_url>/pm/v2/deploymentjob/update/<job_id>"
-H "accept: application/json"
-H "Authorization: Bearer <JWT_Token>"
-H "Content-Type: application/json
API Body
{
"approvalStatus": "REVOKED",
"approvedPatches": [
"bcc2cee3-736d-3c6f-a4d9-9f3b392d2e56",
"a0bd0873-3355-3186-9734-dd2091072ce4"
],
"dynamicPatchesQQL": "",
"additionalDynamicPatchesQQL": "",
"additionalDynamicQQLType": "",
"isDynamicPatchesQQL": false,
"dynamicQQLType": 1,
"linkedJobId": "",
"assetCount": 1,
"assetIds": [
"734c35b7-5b26-4dc7-b56c-08c5a902c345"
],
"isAssetImported": false,
"assetFilePath": null,
"assetTagIds": [],
"assetDetectionsQQL": "",
"deleted": false,
"duringDeployment": {
"userMessage": "",
"description": ""
},
"name": "test-roll-ax",
"description": "",
"createdBy": {
"user": {
"id": "0b435571-e4d1-6ad6-80be-b2720798867a",
"name": "quays_an11",
"fullName": "Ratnakar Chavan"
},
"date": "1789021832752",
"context": null
},
"patchCount": 2,
"postDeployment": {
"suppressreboots": false,
"onComplete": {
"userMessage": "",
"description": "",
"alwaysShowCompletedPrompt": false
},
"rebootCountdown": {
"interval": 15,
"intervalUnit": "MINUTES",
"userMessage": "Reboot countdown started",
"description": "The system reboot is initiated. It will reboot automatically after the timer countdown."
},
"rebootOption": {
"deferment": {
"count": null,
"interval": null,
"intervalUnit": "HOURS"
},
"userMessage": "",
"description": ""
}
},
"preDeployment": {
"deferment": {
"count": null,
"interval": null,
"intervalUnit": "HOURS"
},
"userMessage": "",
"description": ""
},
"recurring": false,
"dayOfMonth": null,
"recurringLastDayOfMonth": false,
"recurringDayOfMonth": null,
"patchTuesdayPlusXDays": null,
"monthlyRecurringType": null,
"recurringWeekDayOfMonth": null,
"recurringWeekDays": "",
"scheduleType": "On-demand",
"schemaVersion": "1.0",
"startDateTime": null,
"status": "Disabled",
"opportunisticdownloads": false,
"minimizeWindow": false,
"enableReattemptFailedPatches": false,
"reattemptFailedPatches": {
"noOfReattempts": 0,
"exponentialBackoffInterval": 0,
"exponentialBackoffIntervalUnit": "SECONDS"
},
"timeout": -1,
"timeoutUnit": "HOURS",
"runOnNextMaintenanceWindow": true,
"bypassMaintenanceWindow": false,
"timezone": null,
"timezoneType": null,
"type": "Rollback",
"filterType": "Any",
"exclusionFilterType": "Any",
"exclusionTagIds": [],
"matchAllTagIds": [],
"coAuthorUserIds": [],
"platform": "Windows",
"exclusionAssetIds": [],
"preDeployActions": [],
"postDeployActions": [],
"notification": null,
"remediationQids": [],
"isVulnContext": false,
"subCategory": "Patch",
"chainedJobRule": [],
"hostIsolationConfig": null,
"quarantineAssetRequestNotification": null,
"isDefaultJob": false,
"defaultJobConfiguration": {
"onAssetActivation": false,
"onAssetInactiveForXDays": null
},
"allowExecutionWithPendingReboot": false,
"customPatchURLId": null,
"downloadRandomizeTime": 0,
"downloadRandomizeTimeUnit": "MINUTES",
"jobCategory": 3,
"jobSource": 2
}
API Response
{
"id": "65e7624a-91f4-4b4d-bb28-8681a99b6e50",
"schemaVersion": "1.0",
"name": "test-roll-ax",
"immediate": null,
"type": "Rollback",
"status": "Disabled",
"assetIds": [
"734c35b7-5b26-4dc7-b56c-08c5a902c345"
],
"assetTagIds": [],
"matchAllTagIds": [],
"exclusionTagIds": [],
"disabledPatches": null,
"exclusionAssetIds": [],
"coAuthorUserIds": [],
"approvedPatches": [
"bcc2cee3-736d-3c6f-a4d9-9f3b392d2e56",
"a0bd0873-3355-3186-9734-dd2091072ce4"
],
"description": "",
"patchCount": 2,
"assetCount": null,
"scheduleType": "On-demand",
"startDateTime": null,
"recurring": false,
"recurringWeekDays": "",
"dayOfMonth": null,
"recurringDayOfMonth": null,
"recurringWeekDayOfMonth": null,
"timezoneType": null,
"timezone": null,
"timeout": -1,
"timeoutUnit": "HOURS",
"preDeployment": {
"userMessage": "",
"deferment": {
"count": 0,
"interval": 0,
"intervalUnit": "HOURS"
},
"description": ""
},
"duringDeployment": {
"userMessage": "",
"description": ""
},
"postDeployment": {
"rebootHonorOnUserLogin": false,
"rebootOption": {
"userMessage": "",
"description": "",
"deferment": {
"count": 0,
"interval": 0,
"intervalUnit": "HOURS"
}
},
"rebootCountdown": {
"interval": 15,
"intervalUnit": "MINUTES",
"userMessage": "Reboot countdown started",
"description": "The system reboot is initiated. It will reboot automatically after the timer countdown."
},
"onComplete": {
"userMessage": "",
"description": "",
"alwaysShowCompletedPrompt": false
},
"suppressreboots": false
},
"createdBy": {
"user": {
"id": "0b435571-e4d1-6ad6-80be-b2720798867a",
"name": "quays_an11",
"fullName": "Ratnakar Chavan"
},
"date": "1789021832752",
"context": null
},
"updatedBy": {
"user": {
"id": "0b435571-e4d1-6ad6-80be-b2720798867a",
"name": "quays_an11",
"fullName": null
},
"date": "1789024127301",
"context": null
},
"deletedBy": null,
"tags": null,
"matchAllTags": null,
"patchesList": null,
"assetsList": null,
"exclusionAssetList": null,
"exclusionTags": null,
"directAssetCount": 0,
"taggedAssetCount": 0,
"filterType": "Any",
"exclusionFilterType": "Any",
"minimizeWindow": false,
"startDateTimeEpoch": 0,
"platform": "Windows",
"continueOnPatchFailure": false,
"dynamicPatchesQQL": "",
"isDynamicPatchesQQL": false,
"assetDetectionsQQL": "",
"preDeployActions": [],
"postDeployActions": [],
"applicableAssetCount": 1,
"dynamicQQLType": 1,
"monthlyRecurringType": null,
"patchTuesdayPlusXDays": null,
"recurringLastDayOfMonth": false,
"jobCategory": 3,
"jobSource": 2,
"completionPercent": null,
"totalAssetCount": null,
"assetResultReceivedCount": null,
"notification": null,
"latestApproval": null,
"linkedJobId": null,
"linkedToJob": null,
"linkedJobs": null,
"jobStartCountdown": null,
"passwordAction": null,
"subCategory": "Patch",
"additionalDynamicPatchesQQL": null,
"additionalDynamicQQLType": null,
"downloadRandomizeTime": 0,
"downloadRandomizeTimeUnit": "MINUTES",
"customPatchURLId": null,
"isVulnContext": false,
"remediationQids": [],
"remediationCves": null,
"etmFilters": null,
"isAssetImported": false,
"chainedJobRule": null,
"quarantineAssetRequestNotification": null,
"hostIsolationConfig": null,
"enableReattemptFailedPatches": false,
"reattemptFailedPatches": {
"noOfReattempts": 0,
"exponentialBackoffInterval": 0,
"exponentialBackoffIntervalUnit": "SECONDS"
},
"allowExecutionWithPendingReboot": false,
"isDefaultJob": false,
"defaultJobConfiguration": {
"onAssetActivation": false,
"onAssetInactiveForXDays": null
},
"runOnNextMaintenanceWindow": true,
"bypassMaintenanceWindow": false,
"approvalStatus": "REVOKED",
"opportunisticdownloads": false
}
UI Release Updates
To know more about the UI features, enhancements, and issues addressed, see Patch Management Release 4.2.